import vnode from "./vnode"; // 确保 vnode 是一个可以创建虚拟节点的函数或模块  
import createElement from "./createElement"; // 修正导入名称  
import patchVnode from "./patchVnode";

export default function update(oldVnode, newVnode) {
  // 如果 oldVnode 是 DOM 节点，则将其转换为虚拟节点  
  if (oldVnode.tagName && !oldVnode.sel) {
    oldVnode = vnode(
      oldVnode.tagName.toLowerCase(),
      {}, // 这里可能需要从 DOM 节点中提取其他属性或数据  
      [], // 同样，这里可能需要处理子节点  
      undefined,
      oldVnode // 将原始 DOM 节点作为 elm 属性存储  
    );
  }

  // 如果 key 和 sel 相同，则进行更复杂的 DOM 更新（这里未实现）  
  if (oldVnode.key === newVnode.key && oldVnode.sel === newVnode.sel) {
    patchVnode(newVnode,oldVnode)
  } else {
    // 如果 key 或 sel 不同，则替换节点  
    let newVnodeElm = createElement(newVnode);
    if (oldVnode.elm && oldVnode.elm.parentNode) {
      // 使用 parentNode 的 insertBefore 方法来替换节点  
      oldVnode.elm.parentNode.insertBefore(newVnodeElm, oldVnode.elm);
      // 可选：移除旧的 DOM 节点  
      oldVnode.elm.parentNode.removeChild(oldVnode.elm);
      // 注意：通常你可能希望在所有子节点和属性都更新完毕后再移除旧节点  
      // 但在这个简单的替换场景中，我们直接替换了它  
      console.log("节点已替换");
    } else {
      // 如果没有父节点，则可能需要将新节点添加到某个现有的 DOM 元素中  
      // 这里没有实现，因为通常需要一个具体的挂载点  
      console.log("无法替换节点，因为没有父节点");
    }
  }

  // 注意：这里没有返回任何值，但在某些情况下，你可能需要返回新的 vnode 或其他信息  
}

// 注意：你的 vnode 函数和 createElement 函数需要正确实现才能使上述代码工作  
// vnode 函数应该能够创建一个具有 sel, key, children, text, elm 等属性的对象  
// createElement 函数应该能够根据 vnode 创建一个对应的 DOM 节点
